Manual merge.
authorsmh22@firebug.cl.cam.ac.uk <smh22@firebug.cl.cam.ac.uk>
Mon, 1 Aug 2005 10:48:24 +0000 (10:48 +0000)
committersmh22@firebug.cl.cam.ac.uk <smh22@firebug.cl.cam.ac.uk>
Mon, 1 Aug 2005 10:48:24 +0000 (10:48 +0000)
1  2 
linux-2.4-xen-sparse/arch/xen/kernel/time.c
linux-2.6-xen-sparse/arch/xen/configs/xen0_defconfig_x86_32
linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32

index 9b3d40a08c65b15c36e72b8475b348ec63aa3830,9b3d40a08c65b15c36e72b8475b348ec63aa3830..f66b1992cd9a871691ad427b8c1e756037811603
@@@ -225,21 -225,21 +225,30 @@@ static int set_rtc_mmss(unsigned long n
   */
  static void __get_time_values_from_xen(void)
  {
--    do {
--        shadow_time_version = HYPERVISOR_shared_info->time_version2;
--        rmb();
--        shadow_tv.tv_sec    = HYPERVISOR_shared_info->wc_sec;
--        shadow_tv.tv_usec   = HYPERVISOR_shared_info->wc_usec;
--        shadow_tsc_stamp    = 
--            (u32)(HYPERVISOR_shared_info->tsc_timestamp >> rdtsc_bitshift);
--        shadow_system_time  = HYPERVISOR_shared_info->system_time;
--        rmb();
--    }
--    while ( shadow_time_version != HYPERVISOR_shared_info->time_version1 );
--}
++      shared_info_t           *s = HYPERVISOR_shared_info;
++      struct vcpu_time_info   *src;
++      struct shadow_time_info *dst;
++
++      src = &s->vcpu_time[smp_processor_id()];
++      dst = &per_cpu(shadow_time, smp_processor_id());
++
++      do {
++              dst->version = src->time_version2;
++              rmb();
++              dst->tsc_timestamp     = src->tsc_timestamp;
++              dst->system_timestamp  = src->system_time;
++              dst->tsc_to_nsec_mul   = src->tsc_to_system_mul;
++              dst->tsc_shift         = src->tsc_shift;
++              rmb();
++      }
++      while (dst->version != src->time_version1);
  
--#define TIME_VALUES_UP_TO_DATE \
-- ({ rmb(); (shadow_time_version == HYPERVISOR_shared_info->time_version2); })
++      dst->tsc_to_usec_mul = dst->tsc_to_nsec_mul / 1000;
++
++      if ((shadow_tv.tv_sec != s->wc_sec) ||
++          (shadow_tv.tv_usec != s->wc_usec))
++              update_wallclock();
++}
  
  
  /*
@@@ -263,6 -263,6 +272,17 @@@ static inline unsigned long __get_time_
      return (unsigned long)delta;
  }
  
++static inline int time_values_up_to_date()
++{
++      struct vcpu_time_info   *src;
++      struct shadow_time_info *dst;
++
++      src = &HYPERVISOR_shared_info->vcpu_time[smp_processor_id()];
++      dst = &per_cpu(shadow_time, smp_processor_id());
++
++      return (dst->version == src->time_version2);
++}
++
  
  /*
   * Returns the current time-of-day in UTC timeval format.
@@@ -286,7 -286,7 +306,7 @@@ void do_gettimeofday(struct timeval *tv
      __normalize_time(&_tv.tv_sec, &nsec);
      _tv.tv_usec += (long)nsec / 1000L;
  
--    if ( unlikely(!TIME_VALUES_UP_TO_DATE) )
++    if ( unlikely(!time_values_up_to_date()) )
      {
          /*
           * We may have blocked for a long time, rendering our calculations
index 44a34d0a1ea26b98a4df74b77f6d2409dadaa943,44a34d0a1ea26b98a4df74b77f6d2409dadaa943..99725530c3a9cf6e219df8ee25d85c23e848b24e
@@@ -18,8 -18,8 +18,8 @@@ CONFIG_XEN_BLKDEV_GRANT=
  CONFIG_XEN_NETDEV_BACKEND=y
  CONFIG_XEN_BLKDEV_FRONTEND=y
  CONFIG_XEN_NETDEV_FRONTEND=y
--# CONFIG_XEN_NETDEV_GRANT_TX is not set
--# CONFIG_XEN_NETDEV_GRANT_RX is not set
++CONFIG_XEN_NETDEV_GRANT_TX=y
++ CONFIG_XEN_NETDEV_GRANT_RX=y
  # CONFIG_XEN_NETDEV_FRONTEND_PIPELINED_TRANSMITTER is not set
  # CONFIG_XEN_BLKDEV_TAP is not set
  # CONFIG_XEN_SHADOW_MODE is not set
index cce6efe5c88a687031c5fd61ab6265863de1c188,cce6efe5c88a687031c5fd61ab6265863de1c188..e96ee11d580939698539a24c4642dfd8fc7e7d84
@@@ -15,8 -15,8 +15,8 @@@ CONFIG_NO_IDLE_HZ=
  CONFIG_XEN_BLKDEV_GRANT=y
  CONFIG_XEN_BLKDEV_FRONTEND=y
  CONFIG_XEN_NETDEV_FRONTEND=y
--# CONFIG_XEN_NETDEV_GRANT_TX is not set
--# CONFIG_XEN_NETDEV_GRANT_RX is not set
++CONFIG_XEN_NETDEV_GRANT_TX=y
++CONFIG_XEN_NETDEV_GRANT_RX=y
  # CONFIG_XEN_NETDEV_FRONTEND_PIPELINED_TRANSMITTER is not set
  # CONFIG_XEN_BLKDEV_TAP is not set
  # CONFIG_XEN_SHADOW_MODE is not set